package com.atguigu.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotBlank;
import java.io.Serializable;

/**
 * @author 张三禾
 * @create 2023-02-28 18:45
 * @Description 用户的实体类
 */

//lombok插件：@Data可以简化get、set以及无参构造函数
@Data
//@TableName:实现实体类和表的映射
@TableName("user")
//实现序列化接口Serializable：序列化能把堆内存中的对象的生命周期延长,做持久化操作
public class User implements Serializable {
    //serialVersionUID；在程序中定义，会使软件版本兼容，无论怎么改，都可以相互序列化和反序列化
    //是用来进行反序列化的序列号
    public static final Long serialVersionUID = 1L;

    // @TableId(type = IdType.AUTO)代表，注解主键，IDType泛型代表主键
    @TableId(type = IdType.AUTO)
//    //@JsonProperty：用于序列化和反序列化，反序列化时根据属性值进行匹配
//    a)	序列化：Java对象->JSON
//    b)	反序列化：JSON->Java对象
    @JsonProperty("user_id")
    private Integer userId;
    @Length(min=5)
    private String  userName;
    //@JsonIgnore 忽略属性，不接收json，不生成json
    //@JsonInclude(JsonInclude.Include.NON_NULL)在生成json的时候，如果属性为null，则不对该属性进行序列化
    //即为空不生成json，但可以接收json
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @NotBlank
    private String  password;
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @NotBlank
    private String  userPhonenumber;
}
